      !< @file 
      !> @brief Cria a relação entre os nós da malha de diferenças finitas e as incógnitas do problema inverso.
      !> 
      subroutine criadepCX()

      use globais
      implicit none
      
      integer :: ndonoh !< número do nó da malha do problema direto
      integer :: ndonoh0!<  número do nó da malha do problema inverso
      integer :: i!< contador que indica posição em x dos nós da malha do problema direto 
      integer ::j!< contador que indica posição em z dos nós da malha do problema direto 
      integer ::ierr!< indica erro de alocação de memória
      double precision :: x0!< posição na direção x do nó da malha do problema inverso
      double precision :: z0!< posição na direção z do nó da malha do problema inverso
      double precision :: xdonoh!< posição na direção x do nó da malha do problema direto
      double precision :: zdonoh!< posição na direção x do nó da malha do problema direto
      integer :: i0!< contador que indica posição em x dos nós da malha do problema inverso 
      integer :: j0!< contador que indica posição em x dos nós da malha do problema inverso 

      integer :: depcriada!< flag que indica se determinado nó da malha do problema direto já teve a variável do problema inverso com a qual ele está relacionado identificada 

      integer, dimension(:),allocatable:: cont !< vetor que armazena quantos nós estão relacionados com cada variável do PI

      write(*,*)'alocando cont...'
      allocate(cont(nx0*nz0),stat=ierr)
      if(ierr.eq.0)then
	  write(*,*)'.........Ok'
      else
	  write(*,*)'.........allocation error',ierr     
	  stop
      endif


      do i=1,nx0*nz0
	  cont(i)=0
      enddo
! armazena quais nohs do grid cada incognita influencia

! 	do j=1,Nz !inclui os nohs da pml na dependencia
! 	    do i=1,Nx
	do j=1,Nz-(Npml-1) !exclui os nohs da pml na dependencia : necessita prolongar as propriedades do meio para as pmls
	    zdonoh=   dfloat(j-1)*delta
	    do i=Npml,Nx-(Npml-1)
		ndonoh = (j-1)*Nx+i
		xdonoh=dfloat(i-Npml)*delta

		depcriada=0

		do j0=1,Nz0
		    z0 = dfloat(j0-1)*deltaz0+ 0.5d0*deltaZ0
		    do i0=1,Nx0
			ndonoh0 = (j0-1)*Nx0+i0
			x0 = dfloat(i0-1)*deltax0+ 0.5d0*deltaX0


		      if(depcriada.eq. 0   .and.   xdonoh.le.x0+0.5d0*deltax0   .and. &
						      &   zdonoh.le.z0+0.5d0*deltaz0 )then !soh serve para pontos internos do modelo, pml nao
			    cont(ndonoh0) = cont(ndonoh0) + 1
			    depcriada=1
			    depX(cont(ndonoh0),ndonoh0) = ndonoh
! 			    write(22,*)xdonoh,zdonoh,ndonoh0
		      endif

! ! (soh eh necessario se os nohs das pmls entrarem no loop de i e j)
! 			if(i0.ne.1 .and. i0.ne.Nx0 .and. j0.ne.Nz0 .and. j0.ne.1)then  !caso I
! 			    if(xdonoh.le.x0+0.5d0*deltax0 .and. xdonoh.gt.x0-0.5d0*deltax0  .and. &
! 			    &  zdonoh.le.z0+0.5d0*deltaz0 .and. zdonoh.gt.z0-0.5d0*deltaz0)then
! 				cont(ndonoh0) = cont(ndonoh0) + 1
! 				depX(cont(ndonoh0),ndonoh0) = ndonoh
! ! 				write(*,*)i,j,(j0-1)*Nx0+i0
! 			    endif
! 			elseif(i0.eq.1   .and. j0.ne.Nz0.and. j0.ne.1)then	 !caso II		
! 			    if(xdonoh.le.x0+0.5d0*deltax0 .and.  &
! 			    &  zdonoh.le.z0+0.5d0*deltaz0 .and. zdonoh.gt.z0-0.5d0*deltaz0)then
! 				cont(ndonoh0)=cont(ndonoh0)+1
! 				depX(cont(ndonoh0),ndonoh0) = ndonoh
! ! 				write(*,*)i,j,(j0-1)*Nx0+i0
! 			    endif
! 			elseif(i0.eq.1   .and. j0.eq.Nz0)then		 !caso III	
! 			    if(xdonoh.le.x0+0.5d0*deltax0 .and.  &
! 			    &    zdonoh.gt.z0-0.5d0*deltaz0)then
! 				cont(ndonoh0)=cont(ndonoh0)+1
! 				depX(cont(ndonoh0),ndonoh0) = ndonoh
! ! 				write(*,*)i,j,(j0-1)*Nx0+i0
! 			    endif
! 			elseif(i0.eq.1   .and. j0.eq.1)then	 !caso IV		
! 			    if(xdonoh.le.x0+0.5d0*deltax0 .and.  &
! 			    &  zdonoh.le.z0+0.5d0*deltaz0 )then
! 				cont(ndonoh0)=cont(ndonoh0)+1
! 				depX(cont(ndonoh0),ndonoh0) = ndonoh
! ! 				write(*,*)i,j,(j0-1)*Nx0+i0
! 			    endif
! 			elseif(i0.eq.Nx0   .and. j0.ne.Nz0.and. j0.ne.1)then	 !caso V		
! 			    if( xdonoh.gt.x0-0.5d0*deltax0  .and. &
! 			    &  zdonoh.le.z0+0.5d0*deltaz0 .and. zdonoh.gt.z0-0.5d0*deltaz0)then
! 				cont(ndonoh0)=cont(ndonoh0)+1
! 				depX(cont(ndonoh0),ndonoh0) = ndonoh
! ! 				write(*,*)i,j,(j0-1)*Nx0+i0
! 			    endif
! 			elseif(i0.eq.Nx0   .and. j0.eq.Nz0)then	 !caso VI		
! 			    if( xdonoh.gt.x0-0.5d0*deltax0 .and. &
! 			    &   zdonoh.gt.z0-0.5d0*deltaz0)then
! 				cont(ndonoh0)=cont(ndonoh0)+1
! 				depX(cont(ndonoh0),ndonoh0) = ndonoh
! ! 				write(*,*)i,j,(j0-1)*Nx0+i0
! 			    endif
! 			elseif(i0.eq.Nx0   .and. j0.eq.1)then	 !caso VII		
! 			    if( xdonoh.gt.x0-0.5d0*deltax0 .and. &
! 			    &  zdonoh.le.z0+0.5d0*deltaz0  )then
! 				cont(ndonoh0)=cont(ndonoh0)+1
! 				depX(cont(ndonoh0),ndonoh0) = ndonoh
! ! 				write(*,*)i,j,(j0-1)*Nx0+i0
! 			    endif
! 			elseif(i0.ne.1 .and. i0.ne.Nx0 .and. j0.eq.Nz0)then	 !caso VIII		
! 			    if(xdonoh.le.x0+0.5d0*deltax0                 .and. xdonoh.gt.x0-0.5d0*deltax0 .and. &
! 			    &   zdonoh.gt.z0-0.5d0*deltaz0)then
! 				cont(ndonoh0)=cont(ndonoh0)+1
! 				depX(cont(ndonoh0),ndonoh0) = ndonoh
! ! 				write(*,*)i,j,(j0-1)*Nx0+i0
! 			    endif
! 			elseif(i0.ne.1 .and. i0.ne.Nx0 .and. j0.eq.1)then	 !caso IX		
! 			    if(xdonoh.le.x0+0.5d0*deltax0  .and. xdonoh.gt.x0-0.5d0*deltax0 .and. &
! 			    &  zdonoh.le.z0+0.5d0*deltaz0 )then
! 				cont(ndonoh0)=cont(ndonoh0)+1
! 				depX(cont(ndonoh0),ndonoh0) = ndonoh
! ! 				write(*,*)i,j,(j0-1)*Nx0+i0
! 			    endif
! 			endif


		      enddo !i0
		  enddo   !j0

	    enddo !i
	enddo !j

	deallocate(cont)


! ! armazena quais nohs do grid cada incognita influencia (LOOP ANTIGO, com PML e casos)
! 
! 	do j0=1,Nz0
! 	    do i0=1,Nx0
! 		x0 = dfloat(i0-1)*deltax0+ 0.5d0*deltaX0
! 		z0 = dfloat(j0-1)*deltaz0+ 0.5d0*deltaZ0
! 		cont = 0
! 
! ! 		do j=1,Nz
! ! 		    do i=1,Nx
! 		do j=1,Nz-(Npml-1)
! 		    do i=Npml,Nx-(Npml-1)
! 
! 			xdonoh=dfloat(i-Npml)*delta
! 			zdonoh=   dfloat(j-1)*delta
! 
! 			if(i0.ne.1 .and. i0.ne.Nx0 .and. j0.ne.Nz0 .and. j0.ne.1)then  !caso I
! 			    if(xdonoh.le.x0+0.5d0*deltax0 .and. xdonoh.gt.x0-0.5d0*deltax0  .and. &
! 			    &  zdonoh.le.z0+0.5d0*deltaz0 .and. zdonoh.gt.z0-0.5d0*deltaz0)then
! 				cont=cont+1
! 				depX(cont,(j0-1)*Nx0+i0) = (j-1)*Nx + i
! ! 				write(*,*)i,j,(j0-1)*Nx0+i0
! 			    endif
! 			elseif(i0.eq.1   .and. j0.ne.Nz0.and. j0.ne.1)then	 !caso II		
! 			    if(xdonoh.le.x0+0.5d0*deltax0 .and.  &
! 			    &  zdonoh.le.z0+0.5d0*deltaz0 .and. zdonoh.gt.z0-0.5d0*deltaz0)then
! 				cont=cont+1
! 				depX(cont,(j0-1)*Nx0+i0) = (j-1)*Nx + i
! ! 				write(*,*)i,j,(j0-1)*Nx0+i0
! 			    endif
! 			elseif(i0.eq.1   .and. j0.eq.Nz0)then		 !caso III	
! 			    if(xdonoh.le.x0+0.5d0*deltax0 .and.  &
! 			    &    zdonoh.gt.z0-0.5d0*deltaz0)then
! 				cont=cont+1
! 				depX(cont,(j0-1)*Nx0+i0) = (j-1)*Nx + i
! ! 				write(*,*)i,j,(j0-1)*Nx0+i0
! 			    endif
! 			elseif(i0.eq.1   .and. j0.eq.1)then	 !caso IV		
! 			    if(xdonoh.le.x0+0.5d0*deltax0 .and.  &
! 			    &  zdonoh.le.z0+0.5d0*deltaz0 )then
! 				cont=cont+1
! 				depX(cont,(j0-1)*Nx0+i0) = (j-1)*Nx + i
! ! 				write(*,*)i,j,(j0-1)*Nx0+i0
! 			    endif
! 			elseif(i0.eq.Nx0   .and. j0.ne.Nz0.and. j0.ne.1)then	 !caso V		
! 			    if( xdonoh.gt.x0-0.5d0*deltax0  .and. &
! 			    &  zdonoh.le.z0+0.5d0*deltaz0 .and. zdonoh.gt.z0-0.5d0*deltaz0)then
! 				cont=cont+1
! 				depX(cont,(j0-1)*Nx0+i0) = (j-1)*Nx + i
! ! 				write(*,*)i,j,(j0-1)*Nx0+i0
! 			    endif
! 			elseif(i0.eq.Nx0   .and. j0.eq.Nz0)then	 !caso VI		
! 			    if( xdonoh.gt.x0-0.5d0*deltax0 .and. &
! 			    &   zdonoh.gt.z0-0.5d0*deltaz0)then
! 				cont=cont+1
! 				depX(cont,(j0-1)*Nx0+i0) = (j-1)*Nx + i
! ! 				write(*,*)i,j,(j0-1)*Nx0+i0
! 			    endif
! 			elseif(i0.eq.Nx0   .and. j0.eq.1)then	 !caso VII		
! 			    if( xdonoh.gt.x0-0.5d0*deltax0 .and. &
! 			    &  zdonoh.le.z0+0.5d0*deltaz0  )then
! 				cont=cont+1
! 				depX(cont,(j0-1)*Nx0+i0) = (j-1)*Nx + i
! ! 				write(*,*)i,j,(j0-1)*Nx0+i0
! 			    endif
! 			elseif(i0.ne.1 .and. i0.ne.Nx0 .and. j0.eq.Nz0)then	 !caso VIII		
! 			    if(xdonoh.le.x0+0.5d0*deltax0                 .and. xdonoh.gt.x0-0.5d0*deltax0 .and. &
! 			    &   zdonoh.gt.z0-0.5d0*deltaz0)then
! 				cont=cont+1
! 				depX(cont,(j0-1)*Nx0+i0) = (j-1)*Nx + i
! ! 				write(*,*)i,j,(j0-1)*Nx0+i0
! 			    endif
! 			elseif(i0.ne.1 .and. i0.ne.Nx0 .and. j0.eq.1)then	 !caso IX		
! 			    if(xdonoh.le.x0+0.5d0*deltax0  .and. xdonoh.gt.x0-0.5d0*deltax0 .and. &
! 			    &  zdonoh.le.z0+0.5d0*deltaz0 )then
! 				cont=cont+1
! 				depX(cont,(j0-1)*Nx0+i0) = (j-1)*Nx + i
! ! 				write(*,*)i,j,(j0-1)*Nx0+i0
! 			    endif
! 			endif
! 
! 
! 		      enddo !i
! 		  enddo   !j
! 
! 	    enddo !i0
! 	enddo !j0








      return
      end subroutine criadepCX